#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include<vector>
#include<algorithm>
#include<set>
#include <unordered_map>
using namespace std;

//int MLS(vector<int>& arr)
//{
//
//    sort(arr.begin(), arr.end());
//    int ret = 0;
//
//    for (int left = 0, right = 0; right < arr.size() - 1; right++)
//    {
//        if (arr[right + 1] - arr[right] == 1)
//        {
//            ret = max(ret, right + 1 - left + 1);
//        }
//        else if (arr[right + 1] - arr[right] != 1 && arr[right + 1] - arr[right] != 0)
//        {
//            left = right + 1;
//        }
//
//    }
//    return ret;
//}

int MLS(vector<int>& arr)
{
    set<int> s;
    for (auto e : arr)
    {
        s.insert(e);
    }
    int ret = 0;
    vector<int> v(s.size());
    int index = 0;
    for (auto e : s)
    {
        v[index++] = e;
    }

    for (int left = 0, right = 0; right < v.size() - 1; right++)
    {
        if (v[right + 1] - v[right] == 1)
        {
            ret = max(ret, right + 1 - left + 1);
        }
        else
        {
            left = right + 1;
        }
    }
    return ret;
}

//int main()
//{
//    int a = 5, b = 7;
//    //cin >> a >> b;
//
//    int m = max(a, b);
//    // for(int i = m;;i+=m)
//    // {
//    //     if(i%a==0 && i%b==0)
//    //     {
//    //         cout<<i;
//    //         break;
//    //     }
//    // }
//    int t = 1;
//    for (int i = min(a, b);; i *= t)
//    {
//        if (i % a == 0 && i % b == 0)
//        {
//            cout << i;
//            break;
//        }
//        t++;
//        i = min(a, b);
//    }
//	return 0;
//}

//int main()
//{
//    char matrix[3][2];
//    for (int i = 0; i < 3; i++)
//    {
//        for (int j = 0; j < 2; j++)
//        {
//            cin >> matrix[i][j];
//        }
//    }
//    return 0;
//}


//int main()
//{
//    enum
//    {
//        n = 3,
//        m = 2
//    };
//    unordered_map<int, int> um({ {'l', 4}, {'o', 3}, {'v', 2}, {'e' , 1} });
//    /*int n, m;
//    cin >> n >> m;*/
//
//    char ch[n][m];
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < m; j++)
//        {
//            cin >> ch[i][j];
//        }
//    }
//
//    int dp[n][m];
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < m; j++)
//        {
//            dp[i][j] = um[ch[i][j]];
//        }
//    }
//
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < m; j++)
//        {
//            if (j + 1 < m)
//            {
//                dp[i][j + 1] = max(dp[i][j + 1], dp[i][j] + um[ch[i][j + 1]]);
//            }
//            if (i + 1 < n)
//            {
//                dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] + um[ch[i + 1][j]]);
//            }
//        }
//    }
//
//    int ret = 0;
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < m; j++)
//        {
//            ret = max(ret, dp[i][j]);
//        }
//
//    }
//    cout << ret;
//    return 0;
//}

vector<string> uncommonFromSentences(string s1, string s2) {
    unordered_map<string, int> m;

    int cur = 0;
    while (cur < s1.size())
    {
        string w;
        while (cur < s1.size() && s1[cur] != ' ')
        {
            w += s1[cur++];
        }
        m[w]++;
        cur++;
    }
    cur = 0;
    while (cur < s2.size())
    {
        string w;
        while (cur < s2.size() && s2[cur] != ' ')
        {
            w += s2[cur++];
        }
        m[w]++;
        cur++;
    }

    vector<string> ret;
    for (auto& [x, y] : m)
    {
        if (y == 1)
        {
            ret.push_back(x);
        }
    }

    return ret;
}

int main()
{
    vector<string> ret = uncommonFromSentences("this apple is sweet", "this apple is sour");

    return 0;
}